import { omitBy } from '@peng_kai/kit/libs/lodash-es';
import type { I18nOptions } from '@peng_kai/kit/libs/vue-i18n';

export function normalizeLocaleCode(code: string) {
  // 移除所有空白字符并转换为小写
  const normalized = code.replace(/\s/g, '').toLowerCase();

  // 处理特殊情况：中文
  if (normalized === 'zh-cn' || normalized === 'zh-hans')
    return 'zh-CN';

  if (normalized === 'zh-tw' || normalized === 'zh-hant')
    return 'zh-TW';

  // 分割语言代码和国家/地区代码
  const [language, country] = normalized.split(/[-_]/);

  // 如果存在国家/地区代码，将其转换为大写
  if (country)
    return `${language}-${country.toUpperCase()}`;

  // 如果只有语言代码，直接返回
  return language;
}

/**
 * 从模块中排除指定的语言包
 */
export function omitLocale(modules: Record<string, any>, excludes: string[] = []) {
  return omitBy(modules, (_, path) => excludes.some(locale => path.includes(locale)));
}

/** 添加语言格式 */
export function addTimeFormat<T extends string>(name: T, config: NonNullable<I18nOptions['datetimeFormats']>[string][string]) {
  return {
    [name]: config,
    [`${name}-utc`]: { ...config, timeZone: 'UTC' },
  } as Record<T | `${T}-utc`, typeof config>;
}
